package leetcode;

import java.util.HashMap;

public class LargestSubStringWithoutRepeat {

	public static void main(String[] args) {
		System.out.println(lengthOfLongestSubstring("abba"));
	}
	//求最大的不包括重复数字的长度
	public static int lengthOfLongestSubstring(String s) {
		if(s == null || s.length() <= 0){
			return 0;
		}
		HashMap<Character, Integer> map = new HashMap<>(); //用于存储字符对应的下标
		int length = s.length();
		Integer temp = 0;
		int start = 0;  //用于指示非重复字符串中的开始下标
		int maxLength = 0;
		for(int i = 0; i < length; i++){
			if( (temp = map.get(s.charAt(i))) != null ){
				System.out.println("char: " + s.charAt(i) + " xiabiao: " + temp);
				//这里去最大值是为了防止这种情况： abba ，a的存储值为0，但是当再次遇到a的时候就是得到的0了
				//而此时的0是无效的了，因为已经将start更新了
				start = Math.max(start, temp + 1);  //temp + 1表示指向了后一个字符，比如abcadefr，a是重复的，
				                             //会指向b（0 + 1）
			}
			map.put(s.charAt(i), i);
			System.out.println("maxLength:" + maxLength + " " + (i - start + 1));
			maxLength = Math.max(maxLength, i - start + 1);
		}
		return maxLength;
	}
}
